Kinesis Data Firehose で「Lambda.InvokeAccessDenied」が発生するときの対処方法
困っていた内容
Kinesis Data Firehose で Lambda 関数によるデータ変換を設定しています。データを送信すると、S3 バケットのprocessing-failed
フォルダに次のエラーが記録され、変換に失敗しました。データ変換を正常に実施させるには、どうしたら良いでしょうか?
{ "attemptsMade": 4, "arrivalTimestamp": 123456789012, "errorCode": "Lambda.InvokeAccessDenied", "errorMessage": "Access was denied. Ensure that the access policy allows access to the Lambda function.", "attemptEndingTimestamp": 123456789012, "rawData": "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", "lambdaArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:hato_data_transformation_lambda:$LATEST" }
どう対応すればいいの?
Kinesis Data Firehose に設定した IAM ロールをご確認ください。
データ変換を行う Lambda 関数は Kinesis Data Firehose から呼び出されます。Kinesis Data Firehose には IAM ロール(サービスロール)が設定でき、 Lambda 関数を呼び出すには設定した IAM ロールに Lambda 関数の呼び出し許可が必要となります。
そのため、Kinesis Data Firehose に設定した IAM ロールのアクセス権限を確認し、必要な権限が許可されているか、また許可するリソース名等の条件指定に誤りがないかご確認ください。
なお、Kinesis Data Firehose から Lambda 関数は呼び出す場合は次のアクセス許可が必要となります。
Amazon Kinesis Data Firehose によるアクセスの制御 - Amazon Kinesis Data Firehose
※リソース名(12行目)は適切な値に書き換える必要があります
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] } ] }
Kinesis に設定した IAM ロールがわからないときは?
Kinesis Data Firehose に設定した IAM ロールは、Kinesis コンソールもしくは AWS CLI のdescribe-delivery-streamコマンドから確認できます。
Kinesis コンソールから確認する場合は、「Configuration」タブをクリックします。
ページ最下部の「Permissions」セッションに IAM ロール が表示されます。クリックすると IAM ロールの詳細画面に遷移します。
※右上の「Edit」は設定する IAM ロールを変更する場合に使用します。ポリシーを編集する場合はリンクをクリックしてください。